<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>03_变量的解构赋值</title>
</head>
<body>
<!--
1. 理解:
  * 从对象或数组中提取数据, 并赋值给(多个)变量，这被称为解构（Destructuring）。
2. 规则：
	*只要等号右边的值不是对象或数组，就先将其转为对象。
	 由于undefined和null无法转为对象，所以对它们进行解构赋值，都会报错。
4. 用途
  * 给多个形参赋值
-->
<script src="js/jquery-1.10.1.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
	// 对象的解构赋值
	let obj={
		name:'kobe',
		age:39,
		sex:undefined
	};
	// let name=obj.name;
	// let age=obj.age;
	let {name:f,age,sex='保密'}=obj;//默认值必须是undefined,赋值才能生效
	console.log(f,age,sex);//kobe 39 保密
	
	
	// 数组的解构赋值
	let arr=[1,3,5,'abc',true];
	// let one=arr[0];
	// let two=arr[1];
	let [,a,b,...others]=arr;
	console.log(a,b,others);//3 5 (2) ["abc", true]
	
	// 多维数组的解构
	var res=[[1,2],[3,4]].map(([a,b])=>a+b);
	console.log(res);//(2) [3, 7]
	
	
	// 函数参数的解构赋值
	function foo({name,age,sex}){//{name,age}=obj
		console.log(name,age,sex='女');//kobe 39 女
	}
	foo(obj);
	
	// 函数参数的rest参数
	function foo2(...obj){
		console.log(...obj);//{name: "kobe", age: 39, sex: undefined}
	}
	foo2(obj)
	
	
	
	
	// // 字符串的解构赋值 
	// let str='蓑衣褪尽任浊流';
	// let [A,B,C,D,E,F,G]=str;
	// console.log(A,B,C,D,E,F,G);//蓑 衣 褪 尽 任 浊 流
	
	// //类似数组的对象都有一个length属性，因此还可以对这个属性解构赋值。
	// let {length:le}=str;
	// console.log(le);//7
	
	
	// // 数值和布尔的解构
	// // 数值和布尔值的包装对象都有toString属性，因此变量s都能取到值。
	// let num=123;
	// let {toString:s}=num;
	// console.log(s);//ƒ toString() { [native code] }
	// console.log(s===Number.prototype.toString)//true
	
	// let bol=true;
	// let {toString:c}=bol;
	// console.log(c);//ƒ toString() { [native code] }
	// console.log(c===Boolean.prototype.toString)//true
</script>
<img src="img/360截图20191004145544832.jpg" >
</body>
</html>